const express = require('express')
const UserModel = require('../db/models/UserModel')
const router = express.Router()
const { RES_CODE } = require('../utils/constants')
const formidable = require('formidable')
const path = require('path')

// 注册分页路由
router.get('/user/:page/:limit', async (req, res) => {
  // 对params 参数解构赋值
  const { page, limit } = req.params
  // 计算skip
  const skip = limit * (page - 1)
  // 得到当前页的用户列表
  const users = await UserModel.find().skip(skip).limit(limit)
  // 得到总数量
  const total = await UserModel.count()
  // 参数传到data
  return res.json({
    code: RES_CODE.SUCCESS,
    data: {
      users,
      total
    },
    message: '查询用户列表成功'
  })
})

// 获取用户信息
router.get('/user', async (req, res) => {
  // 查询id
  const { id } = req.query
  // 查询对应的user
  console.log(id);
  const user = await UserModel.findById(id)
  console.log(user);
  if (user) {
    // 返回响应
    res.json({
      code: RES_CODE.SUCCESS,
      data: user,
      message: '获取用户信息成功'
    })
  } else {
    res.json({
      code: RES_CODE.DATA_ERROR,
      message: '找不到该用户'
    })
  }
})


// 删除指定用户
router.delete('/user/:id', async (req, res) => {
  // 查询id
  const { id } = req.params
  await UserModel.deleteOne({ _id: id })
  res.send({
    code: RES_CODE.SUCCESS,
    message: '删除用户成功'
  })
})


// 创建解析请求的form参数
const form = formidable({
  // 上传保存的文件夹的绝对路径
  uploadDir: path.resolve(__dirname, '../public/upload'),
  // 保留扩展名 默认是false
  keepExtensions: true,
})

// 添加用户
router.post('/user', (req, res) => {
  // 解析请求 (自动保存)        fields非文件参数   files文件参数  
  form.parse(req, async (error, fields, files) => {
    // console.log(fields,files);
    if (error) {
      return res.json({
        code: RES_CODE.DATA_ERROR,
        message: error.message
      })
    }
    // 非文件参数  那么一定是用户名和密码 解析
    const { username, pwd } = fields
    // 查询判断是否有用户 如果有 返回错误响应
    let user = await UserModel.findOne({ username })
    if (user) {
      return res.json({
        code: RES_CODE.DATA_ERROR,
        message: '此用户已经存在'
      })
    }
    // 添加一个新用户  // "profile": "/upload/xxx.jpg",
    // 得到文件对象
    const file = files['profileFile']
    // 得到生成的文件名
    const filename = file.newFilename
    // 得到文件访问路径
    const profile = '/upload/' + filename
    // 插入到数据库中 用户名 + 密码 +图片
    user = await UserModel.create({ username, pwd, profile })
    // 返回成功的响应
    res.json({
      code: RES_CODE.SUCCESS,
      data: user,
      message: '添加用户成功'
    })
  })
})


// 更新用户
router.put('/user', (req, res) => {
  // 解析请求体
  form.parse(req, async (error, fields, files) => {
    if (error) {
      return res.json({
        code: RES_CODE.DATA_ERROR,
        message: error.message
      })
    }
    // 读取参数数据 这里的id 要谨慎
    console.log(fields);
    const {_id, username } = fields
    console.log(_id , username);
    // 得到生成的文件名
    const filename = files['profileFile'].newFilename
    const profile = '/upload/' + filename
    // 更新对应的user
    await UserModel.updateOne({_id}, {username, profile})
    // 返回成功响应
    res.json({
      code: RES_CODE.SUCCESS,
      message: '更新用户成功'
    })
  })
})

module.exports = router
